\vspace{2em}

\subsubsection*{Tesztpálya}

\begin{figure}[h!]
	\centering \includegraphics[width=0.5\textwidth]{palya_01}
	\caption Tesztpálya
\end{figure}

A tesztesetekben egységesen az alábbi ábrára hasonlító tesztpályát használtuk. Az ábra jelölései:

\begin{itemize}
	\item Négyzetek: RoadSegment-ek. Ahol külön nincs jelölve, ott egyszerű RoadSegment példányról van szó.
	\item Négyzetek határán lévő téglalapok: Az útelemek közti kapcsolatot megvalósító RoadSegmentWrapperek, irányítás a nyilak szerint
	\item Kitöltött kör a RoadSegmentWrapperek sarkán: Szabály (pontos típusa mellette jelölve)
\end{itemize}

\subsubsection{Játék indítása}
	\paragraph*{Leírás}
	A teszteset a \verb+World+ és a \verb+Timer+ objektum létrejöttét, a pálya felépítésének folyamatát vizsgálja. A pálya felépítéséhez  \verb+RoadSegment+, \verb+RoadSegmentWrapper+ és \verb+Rule+ objektumokat használunk.
	
	\paragraph*{Bemenet}
		\begin{verbatim}
		# Pálya felépítése

		# A pálya kiterjedése 3*3 útelem
		set_worldDimensions(3, 3)

		# Útelemek lehelyezése.
		create_sourceRS("0;0")
		create_rs("1;0")
		create_hideOut("2;0")

		create_psRS("0;1")
		create_rs("1;1")
		create_rs("2;1")

		create_bank("0;2")
		create_rs("1;2")
		create_rs("2;2")

		# Kapcsolatok felépítése az útelemek között. (RoadSegmentWrapper-ek létrehozása.)
		connect_rs(*, "0;0", "1;0")
		connect_rs(*, "0;0", "0;1")
		connect_rs(*, "1;0", "2;0")
		connect_rs(*, "2;0", "2;1")
		connect_rs(*, "0;1", "1;1")
		connect_rs("1;1-1;0", "1;1", "1;0")
		connect_rs("2;1-1;1", "2;1", "1;1")
		connect_rs("0;2-1;2", "0;2", "1;2")
		connect_rs(*, "1;2", "2;2")
		connect_rs(*, "2;2", "2;1")

		# Szabályok elhelyezése.
		create_trafficLight("trafficlight1", "0;2-1;2")
		create_stopTable("stopsign1", "2;1-1;1")
		create_bunny("bunny1", "1;1-1;0")

		# Megjelenítés.
		display()
		\end{verbatim}
	
	\paragraph*{Elvárt kimenet}
		\begin{verbatim}
		set_worldDimensions
		create_sourceRS
		create_rs
		create_hideOut
		create_rs
		create_rs
		create_rs
		create_bank
		create_rs
		create_rs
		connect_rs
		connect_rs
		connect_rs
		connect_rs
		connect_rs
		connect_rs
		connect_rs
		connect_rs
		connect_rs
		connect_rs
		create_trafficLight
		create_stopTable
		create_bunny
		[SourceRoadSegment #0;0]
		  [OutgoingRoadSegmentWrapper #0;0-1;0]
		  [OutgoingRoadSegmentWrapper #0;0-0;1]
		[RoadSegment #1;0]
		  [IncomingRoadSegmentWrapper #0;0-1;0]
		  [IncomingRoadSegmentWrapper #0;0-0;1]
		  [OutgoingRoadSegmentWrapper #1;0-2;0]
		[HideOut #2;0]
		  [IncomingRoadSegmentWrapper #1;0-2;0]
		  [OutgoingRoadSegmentWrapper #2;0-2;1]
		[RoadSegment #0;1]
		  [IncomingRoadSegmentWrapper #0;0-0;1]
		  [OutgoingRoadSegmentWrapper #0;1-1;1]
		[RoadSegment #1;1]
		  [IncomingRoadSegmentWrapper #0;1-1;1]
		  [OutgoingRoadSegmentWrapper #1;1-1;0]
		  	[BunnyRule #bunny1]: { active: false }
		  [IncomingRoadSegmentWrapper #2;1-1;1]
			[StopSign #stopsign1]: { }
		[RoadSegment #2;1]
		  [IncomingRoadSegmentWrapper #2;0-2;1]
		  [OutgoingRoadSegmentWrapper #2;1-1;1]
			[StopSign #stopsign1]: { }
		  [IncomingRoadSegmentWrapper #2;2-2;1]
		[Bank #0;2]
		  [OutgoingRoadSegmentWrapper #0;2-1;2]
			[TrafficLight #stopsign1]: { green: false }
		[RoadSegment #1;2]
		  [OutgoingRoadSegmentWrapper #1;2-2;2]
		[RoadSegment #2;2]
		  [IncomingRoadSegmentWrapper #1;2-2;2]
		  [OutgoingRoadSegmentWrapper #2;2-2;1]
		\end{verbatim}
	

\subsubsection{Járművek lehelyezése}
	\paragraph*{Leírás}
	A ,,Játék indítása'' teszt-esetben létrehozott pálya \verb+SourceRoadSegment+ típusú elemein helyezünk el különböző járműveket.

	\paragraph*{Bemenet}
		\begin{verbatim}
		﻿#2. teszt-eset: Járművek elhelyezése
		
		# A pályabetöltéssel kezdődik, de
		# terjedelmi okokból azt itt kihagytuk.

		# Civil elhelyezése.
		create_civilian("civilian1")
		change_direction("civilian1", 0)
		enter("civilian1", "0;0")

		display("0;0")

		# Rendőr elhelyezése a Rendőrörsön.
		create_police("police1")
		change_direction("police1", 0)
		enter("police1", "0;1")

		display("0;1")

		# Rabló elhelyezése a Bankon.
		create_player("robber1")
		change_direction("robber1", 0)
		enter("robber1", "0;2")

		display("0;2")
		\end{verbatim}
	
	\paragraph*{Elvárt kimenet}
		\begin{verbatim}
		create_civilian
		change_direction
		enter
		create_police
		change_direction
		enter
		create_player
		change_direction
		enter
		[SourceRoadSegment #0;0]
		  [OutgoingRoadSegmentWrapper #0;0-1;0]
		  [OutgoingRoadSegmentWrapper #0;0-0;1]
		  [Civilian #civilian1]: { rs_id: %s, speed: %f, weight: ?? }
		[PoliceStation #0;1]
		  [IncomingRoadSegmentWrapper #0;0-0;1]
		  [OutgoingRoadSegmentWrapper #0;1-1;1]
		  [Police #police1]: { rs_id: 0;1, speed: 0, weight: ?? }
		[Bank #0;2]
		  [OutgoingRoadSegmentWrapper #0;2-1;2]
			[TrafficLight #stopsign1]: { green: false }
		  [Robber #robber1]: { rs_id: 0;2, speed: 0, weight: ??, lives: ?? }
	  	\end{verbatim}
	

\subsubsection{Idő múlása}
	\paragraph*{Leírás}
	A ,,Játék indítása'' teszt-esetben létrehozott pályán az idő múlására érzékeny objektumok állapotának változását vizsgáljuk. Konkrétan a \verb+TrafficLight+ szabályok ,,színének'' változását, a \verb+Vehicle+ objektumok ,,mozgását'' követjük nyomon.
	
	\paragraph*{Bemenet}
		\begin{verbatim}
		# 3. teszt-eset: Idő múlása

		# A pályabetöltéssel kezdődik, de
		# terjedelmi okokból azt itt kihagytuk.

		# Random döntések kikapcsolása.
		set_interactiveMode(true)

		# Civil elhelyezése.
		create_civilian("civilian1")
		change_direction("civilian1", 0)
		set_vehicleSpeed("civilian1", 0.1)
		enter("civilian1", "0;0")

		# Rendőr elhelyezése a Rendőrörsön.
		create_police("police1")
		change_direction("police1", 0)
		set_vehicleSpeed("police1", 0.2)
		enter("police1", "0;1")

		# Rabló elhelyezése a Bankon.
		create_player("robber1")
		change_direction("robber1", 0)
		set_vehicleSpeed("robber1", 0.25)
		enter("robber1", "0;2")

		# Állapotok kiírása.
		display("civilian1")
		display("police1")
		display("robber1")
		display("trafficlight1")
		display("stopsign1")
		display("bunny1")

		step(10)

		display("civilian1")
		display("police1")
		display("robber1")
		display("trafficlight1")
		display("stopsign1")
		display("bunny1")
		\end{verbatim}
		
	\paragraph*{Elvárt kimenet}
		\begin{verbatim}
		set_interactiveMode
		create_civilian
		change_direction
		set_vehicleSpeed
		enter
		create_police
		change_direction
		set_vehicleSpeed
		enter
		create_player
		change_direction
		set_vehicleSpeed
		enter
		[Civilian #civilian1]: { rs_id: 0;0, speed: 0.1, weight: ?? }
		[Police #police1]: { rs_id: 0;1, speed: 0.2, weight: ?? }
		[Robber #robber1]: { rs_id: 0;2, speed: 0.25, weight: ?? }
		[TrafficLigh #trafficlight1]: { green: false }
		[StopSign #stopsign1]: { }
		[Bunny #bunny1]: { active: false }

		step(5)

		[Civilian #civilian1]: { rs_id: 0;0, speed: 0.1, weight: ?? }
		[Police #police1]: { rs_id: 1;1, speed: 0.2, weight: ?? }
		[Robber #robber1]: { rs_id: 1;2, speed: 0.25, weight: ?? }
		[TrafficLigh #trafficlight1]: { green: false }
		[StopSign #stopsign1]: { }
		[Bunny #bunny1]: { active: false }
		\end{verbatim}

\subsubsection{Ütközések}
	\paragraph*{Leírás}
	Lényegében az ,,Idő múlása'' teszt-eset folytatása, amiben olyan helyzeteket teremtünk, hogy \verb+Robber+-\verb+Police+ és \verb+Robber+-\verb+Civilian+ ütközéseket idézzünk elő.
	
	\paragraph*{Bemenet}
		\begin{verbatim}
		#4.1 teszteset: Robber-Civilian utkozes
		
		#A palyabetoltessel kezdodik, de
		#terjedelmi okokbol azt itt kihagytuk
		
		#civil jarmu letrehozasa
		create_civilian("civ1")
		#jatekos (rablo) letrehozasa
		create_player("robber1")
		
		#lassan halado civil jarmu elhelyezese alul kozepen
		enter("civ1", "1;2")
		set_vehicleSpeed("civ1", 1)
		display("civ1")
		
		#gyorsan halado bankrablo elhelyezese a bal-also sarokban
		enter("robber1", "0;2")
		set_vehicleSpeed("robber1", 10)
		display("robber1")
		
		#kozepso-also utelem megjelenitese az utkozes elott
		display("1;2")
		
		#10 orautes
		step(10)
		
		#az also-kozepso utelem (+ rajta levok) megjelenitese
		display("1;2")
		\end{verbatim}
	\paragraph*{Elvárt kimenet}
		\begin{verbatim}
		create_civilian
		create_player
		enter
		set_vehicleSpeed
		[Civilian #civ1]: { rs_id: 1;2, speed: 1, weight: ??}
		enter
		set_vehicleSpeed
		[Robber #robber1]: { rs_id: 0;2, speed: 10, weight: ??, lives: 3}
		[RoadSegment #1;2]: { vehicle_id: civ1 }
		  [Civilian #civ1]: { rs_id: 1;2, speed: 1, weight: ??}
		step
		[RoadSegment #1;2]: { vehicle_id: robber1 }
		  [Robber #robber1]: { rs_id: 0;2, speed: 10, weight: ??, lives: 2}
		\end{verbatim}

	\paragraph*{Bemenet}
		\begin{verbatim}
		#4.2 teszteset: Robber-Police utkozes
		
		#A palyabetoltessel kezdodik, de
		#terjedelmi okokbol azt itt kihagytuk
		
		#rendor jarmu letrehozasa
		create_civilian("civ1")
		#jatekos (rablo) letrehozasa
		create_player("robber1")
		
		#lassan halado rendor jarmu elhelyezese alul kozepen
		enter("pol1", "1;2")
		set_vehicleSpeed("pol1", 1)
		display("pol1")
		
		#gyorsan halado bankrablo elhelyezese a bal-also sarokban
		enter("robber1", "0;2")
		set_vehicleSpeed("robber1", 10)
		display("robber1")
		
		#kozepso-also utelem megjelenitese az utkozes elott
		display("1;2")
		
		#10 orautes
		step(10)
		
		#az also-kozepso utelem (+ rajta levok) megjelenitese
		display("1;2")
		\end{verbatim}

	\paragraph*{Elvárt kimenet}
		\begin{verbatim}
		create_civilian
		create_player
		enter
		set_vehicleSpeed
		[Civilian #civ1]: { rs_id: 1;2, speed: 1, weight: ??}
		enter
		set_vehicleSpeed
		[Robber #robber1]: { rs_id: 0;2, speed: 10, weight: ??, lives: 3}
		[RoadSegment #1;2]: { vehicle_id: pol1 }
		  [Police #pol1]: { rs_id: 1;2, speed: 1, weight: ??}
		step
		[RoadSegment #1;2]: { vehicle_id: robber1 }
		  [Police #police1]: { rs_id: 0;2, speed: 10, weight: ?? }
		\end{verbatim}

\subsubsection{Elnyelődés}
	\paragraph*{Leírás}
	Lényegében az ,,Idő múlása'' teszt-eset folytatása, amiben különböző típusú járműveket \verb+DrainRoadSegment+ típusú útelemre irányítunk, külön figyelmet fordítva a \verb+Robber+ és a \verb+HideOut+ útelem találkozására.

	\paragraph*{Bemenet}
	\begin{verbatim}
	#5.1 teszteset: Robber-HideOut elnyelodes
	
	#A palyabetoltessel kezdodik, de
	#terjedelmi okokbol azt itt kihagytuk
	
	#bankrablo elhelyezese felul, kozepen
	enter("robber1", "1;0")
	set_vehicleSpeed("robber1", 10)
	change_direction("robber1", 0)
	display("robber1")
	
	#HideOut utelem megjelenitese az utkozes elott
	display("2;0")
	
	#10 orautes
	step(10)
	
	#HideOut utelem (+ rajta levok) megjelenitese
	display("2;0")
	\end{verbatim}
	\paragraph*{Elvárt kimenet}
	\begin{verbatim}
		enter
		set_vehicleSpeed
		change_direction
		[Robber #robber1]: { rs_id: 1;0, speed: 10, weight: ??, lives: 3 }
		[RoadSegment #2;0]: { }
		step
		[RoadSegment #2;0]: { }
	\end{verbatim}
